package org.Niu.July8th.collectionTest.listTest;

import java.util.*;

/**
 * List 接口的实现方式
 *  1. ArrayList 数组实现，查找方便（常用）
 *  2. LinkedList 链表实现，添加方便
 *
 *
 *
 */
public class ListTest {
//    常见 - API
//    在末尾添加一个元素：boolean add(E e)
//    在指定索引添加一个元素：boolean add(int index, E e)
//    删除指定索引的元素：E remove(int index)
//    删除某个元素：boolean remove(Object e)
//    获取指定索引的元素：E get(int index)
//    获取链表大小（包含元素的个数）：int size()
    public static void main(String[] args) {
        // 1. 创建list
        List<Integer> list = List.of(1, 2, 3);
        System.out.println(list);

        ArrayList<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        System.out.println(integers);

        LinkedList<Integer> integers1 = new LinkedList<>();
        integers1.add(1);
        integers1.add(2);
        integers1.add(3);
        System.out.println(integers1);

        // 2. 遍历list,不推荐使用for进行遍历，因为迭代器的效率更高
        ArrayList<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        strings.add("c");
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println("next = " + next);
        }
        // Java的for each循环本身就可以帮我们使用Iterator遍历。
        strings.forEach(System.out::println);

        // 3. list array 互相转化
        // 3.1 toArray() 转化为 Object 数组
        List<Integer> list1 = List.of(1, 2, 3);
        Object[] array = list1.toArray();
        // 3.2 toArray(T[])传入一个类型相同的Array (最常用写法)
        Integer[] array1 = list1.toArray(new Integer[list1.size()]);
        System.out.println(array1);
        // 3.3 array -> list List.of(T...)
        Integer[] arr = new Integer[]{1,2,3,4,5};
        // 调用List.of()，它返回的是一个只读List
        List<Integer> arrList = List.of(arr);
        System.out.println(arrList);
        // 由于是只读的，修改会报错
        // arrList.set(0,11);
        System.out.println("arrList = " + arrList);
        List<Integer> list2 = Arrays.asList(arr);
        System.out.println("list2 = " + list2);


    }
}
